package main

import (
	"fmt"
	"math"
)

/*
	Go 语言函数作为实参
Go 语言可以很灵活的创建函数，并作为另外一个函数的实参。以下实例中我们在定义的函数中初始化一个变量，该函数仅仅是为了使用内置函数
*/

func test121() {
	/* 声明函数变量 */
	getSquareRoot := func(x float64) float64 {
		return math.Sqrt(x)
	}
	/* 使用函数 */
	fmt.Println(getSquareRoot(2))
}

// 声明一个函数类型
type cb func(int) int

func test122() {
	testCallback(1, callBack)

	testCallback(2, func(i int) int {
		fmt.Printf("匿名回调函数,i:%d\n", i)
		return i
	})
}

/**
函数作为参数
*/
func testCallback(x int, f cb) {
	f(x)
}

func callBack(x int) int {
	fmt.Printf("我是回调, x:%d\n", x)
	return x
}

func main12() {
	test122()
}
